#!/bin/bash

# 注意，如果你是使用unix系统执行该脚本，首先需要chmod到可读可写可执行，其次要注意 set fileformat=unix 问题。参考设置的文章：https://blog.csdn.net/weixin_44757863/article/details/120621471
# 注意，如果你是使用unix系统执行该脚本，首先需要chmod到可读可写可执行，其次要注意 set fileformat=unix 问题。参考设置的文章：https://blog.csdn.net/weixin_44757863/article/details/120621471
# 注意，如果你是使用unix系统执行该脚本，首先需要chmod到可读可写可执行，其次要注意 set fileformat=unix 问题。参考设置的文章：https://blog.csdn.net/weixin_44757863/article/details/120621471

# 使用说明：
# 1. 全局替换 APSIM_multiple_simulation_five_optim 作为你的母体文件夹，将来要将该文件复制多份
# 2. 修改下面 totalCount 变量的值, 代表跑多少次
# 3. 在git bash和环境下配置R的环境变量。vi /etc/profile , 然后export PATH="$PATH:/c/Dev/R-4.3.3/bin/x64"，最后 source /etc/profile 这里需要请专业人士做 (如果是linux环境可以跳过此步骤)
# 4. 全局替换 optim_par_five.R 作为你实际执行 R 程序的那个R文件夹
# 5. 修改下面 startCount、endCount、increase的值

# 这是一共开多少台，这里设置为5
totalCount=5
startCount=1
endCount=13
increase=13
OOOOOO=1

# Step 1: 复制APSIM_multiple_simulation_five_optim文件夹 $totalCount次
echo "开始复制APSIM_multiple_simulation_five_optim文件夹"
for i in $(seq 1 $totalCount); do
    foldername="APSIM_multiple_simulation_five_optim$i"
    if [ -d "APSIM_multiple_simulation_five_optim" ]; then
        cp -r "APSIM_multiple_simulation_five_optim" "$foldername"
        if [ $? -ne 0 ]; then
            echo "复制文件夹APSIM_multiple_simulation_five_optim失败"
            exit 1
        fi
        echo "已创建: $foldername"
    else
        echo "原始文件夹APSIM_multiple_simulation_five_optim不存在"
        exit 1
    fi
done

# Step 2: 修改optim_par_five.R文件的内容
echo "开始修改optim_par_five.R文件的内容"
# 获取所有的APSIM_multiple_simulation文件夹路径（假设当前目录下有40个文件夹）
# 这里加入 | sort -V 按照文件夹的自然数字排序。
folders=($(find . -maxdepth 1 -type d -name 'APSIM_multiple_simulation_five_optim*' ! -name 'APSIM_multiple_simulation_five_optim' | sort -V)) # 不包含APSIM_multiple_simulation文件本身
# 循环遍历每个文件夹
for folder in "${folders[@]}"; do
  # 打印当前文件夹处理信息
  echo "Processing folder: $folder"

  # 定义文件路径
  file="$folder/code/optim_par_five.R"

  # 检查文件是否存在
  if [ -f "$file" ]; then

    # 打印当前的startCount和endCount
    echo "Current startCount: $startCount"
    echo "Current endCount: $endCount"
    # 使用sed命令进行字符串替换
    sed -i "s/MMMMMM/$startCount/g" "$file"
    sed -i "s/NNNNNN/$endCount/g" "$file"
	echo "OOOOOO 1 : $OOOOOO"
    sed -i "s/OOOOOO/$OOOOOO/g" "$file"
	echo "s/OOOOOO/$OOOOOO/g $file"
	echo "OOOOOO 2 : $OOOOOO"
    # 计算新的startCount和endCount
    # newStart=$((startCount + increase))
    # newEnd=$((endCount + increase))

    

    

    # 更新startCount和endCount
    startCount=$((startCount + increase))
    endCount=$((endCount + increase))
    OOOOOO=$((OOOOOO + 1))
	

    # 打印替换后的startCount和endCount
    echo "Updated startCount: $startCount"
    echo "Updated endCount: $endCount"
	echo "OOOOOO 3 : $OOOOOO"
  else
    echo "File $file does not exist."
  fi
done

# Step 3: 执行R脚本
echo "开始执行R脚本"
for i in $(seq 1 $totalCount); do
    # 如果你是类unix系统，请不要加入 code，因为 apsim_classic_adaptForLinux 适配的仍旧不完善，请将 您的.apsim后缀文件和所有R可执行文件放在同级目录，否则会出现路径找不到的问题。后续该问题会修复
    codefolder="APSIM_multiple_simulation_five_optim$i/code"
    if [ -d "$codefolder" ]; then
        pwd
        # 执行下列命令：（需要在git bash 中配置R的环境变量）
        # R -f xxxxxxxxx.R > result.txt 2>&1 &
        R -f "$codefolder/optim_par_five.R" > $codefolder/result.txt 2>&1 & # 将标准错误流与标准输出流合并到 result.txt 文件中，以确保所有输出都被捕获。
        
        echo "已执行R脚本: $codefolder"
    else
        echo "文件夹$codefolder不存在"
        exit 1
    fi
done

echo "所有操作已成功完成"
exit 0
